package cn.shengchao.examstar.me.course.acl.ports.repositories;

import cn.shengchao.examstar.me.course.domain.MyCourse;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface IMyCourseRepository {

    List<MyCourse> getMyCourseKnowledgeList(Long studentId, Long courseId);

    /**
     * @param orderId          订单id
     * @param userId           用户id
     * @param courseId         课程id
     * @param knowledgeNodeIds 解锁知识点
     * @param unlockType       解锁方式（1，支付，2，免费）
     */
    void addCourse(String orderId, Long userId, Long courseId, List<Long> knowledgeNodeIds, Long unlockType);

    List<Long> getMyCourseList(Long uid);

    List<Long> getMyCourseListByProductName(Long uid,String productName);
    Long getStudentSum(List<Long> courseIds);

    /**
     * 已经使用的免费解锁次数
     */
    Long getMyUseFreeUnlockSum(Long id, Long userId);

    /**
     * 添加使用记录
     */
    void addUseFreeUnlockSumLog(Long courseId, Long courseNodeId, Long userId);

    /**
     * 移除课程
     */
    void removeCourse(Long userId, Long productId, List<Long> orderItemId);

    Map<Long, Set<Long>> getMyCourseKnowledgeSum(Long userId);
    
    /**
     * 检查用户是否解锁了指定的课程节点列表
     *
     * @param userId        用户ID
     * @param courseNodeIds 需要检查的课程节点ID列表
     * @return 已解锁的课程节点ID集合
     */
    List<MyCourse> checkUserUnlockedCourseNodes(Long userId, List<Long> courseNodeIds);
}
